//知道半径求面积
var r1=2;
var r2=1.5;
var s1=3.14*r1*r1;  
var s2=3.14*r2*r2;
console.log(s1);   //12.56
console.log(s2);     //7.0649999999999995

//函数
////返回绝对值
function a(x) {

    if(x<0){
        return -x
    }else{
        return x
    }
}
console.log(a(-1))        //1，function是函数定义，a是函数名称，(x)是括号内列出函数的参数，{}之间的是函数体，可以没有任何语句，也可以包含若干个函数语句


var b=function(x){        //这里的 function(x){...} 是一个匿名函数，他没有函数名，但他把函数赋值给了变量b，所以变量b就可以调用该函数
    if(x>=0){
        return x;
    }else{
        return -x;
    }
};
console.log(b(-2));    //2
console.log(b(5));    //5,调用函数
console.log(b(-8,'sd','s',null));   //8,因为可以传入任意个参数，所以传入比函数参数多也行，返回8,因为内部不需要这些参数
console.log(b());   //传入比函数参数少也行，函数参数x收到undefined，返回NaN
//上述两种函数方法完全等价，但第二种方法要在函数末尾加上  ;  ,以表示赋值语句结束

//避免收到undefined
function c(x) {
    if(typeof x !== 'number'){
        throw '请输入一个参数'
    }
    if(x>=0){
        return x
    }else{
        return -x
    }
}
//console.log(c());   //控制台报错，请输入一个参数
console.log(c(1));


//arguments  只在函数内部起作用，可获得调用者传入的所有参数
function e(x){
    console.log('x='+x);  //输出5
    console.log('x='+arguments[1]);  //输出69
    for (var i = 0; i < arguments.length; i++) {
        console.log('arg'+i+'='+arguments[i]);     
    }     //依次输出e的值
}
e(5,69,47,7)  //调用者传入的参数
//arguments永远指向调用者输入的所有参数

function f(x){
    if(arguments.length === 0){
        return 0;      //如果传入的参数的长度为0输出0
    }
    var s=arguments[0];
    return s >=0 ? s:-s     //返回值s是否>=0,是则返回s，不是则返回-s
}
console.log(f());  //输出0
console.log(f(-9));  //输出9
console.log(f(65));  //输出65
//所以arguments中，函数不定义任何参数也可以拿到参数的值


//rest
function foo(az,bz,...rest){
    console.log('a='+az);
    console.log('b='+bz);
    console.log(rest);
}
foo(1,2,3,4)   //a=1  b=2  [3,4]
foo(1)    //a=1  b=underfined  []
/////rest只能接在最后，前面用...标识；传入的参数先绑定給a,b，其余的都传入rest。如果传入的参数没填满，rest会接受一个空字符串
